Визуализация данных

“Обычный график дает аналитику гораздо больше пищи для размышлений, чем любая другая форма представления информации.” – Джон Тьюки

Визуализациия – один из важнейших этапов анализа данных. Различные графики могут помочь понять, что не так с вашмими данными, найти какие-то закономерности, понять какая зависимость между переменными (линейная, нелинейная), найти аномалии или выбросы и многое другое. К тому же визуализация это очень красиво!

Графики могут быть очень разными, например:

  1. Визуализация одной переменной (histogram, bar, boxplot).
  2. Визуализация нескольких переменных (scatter plot, line plot).
  3. Визуализация графов.
  4. Визуализация карты.
  5. Визуализация моделей.
  6. Визуализация 3D графиков.

На этом сайте можно найти большое количество разных типов графиков.

ggplot2

В стандартном пакете R есть визуализация с помощью функции plot. Она уже устарела и не такая красивая, как визуализация с помощью пакета ggplot2.

Установка и подгрузка пакета

Давайте установим и подгрузим уже известные нам пакеты, а также пакет ggplot2.

Принцип создания графика

Визуализация часто помогает найти какие-то закономерности в данных, которые потом можно использовать для построения моделей. Давайте возьмем набор данных mpg. Можно вызвать справку по этому датасету с помощью команды ?mpg. Взглянем на то, как выглядит наш набор данных.

## Observations: 234
## Variables: 11
## $ manufacturer <chr> "audi", "audi", "audi", "audi", "audi", "audi", "au…
## $ model        <chr> "a4", "a4", "a4", "a4", "a4", "a4", "a4", "a4 quatt…
## $ displ        <dbl> 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 1.8, 1.8, 2.0, 2…
## $ year         <int> 1999, 1999, 2008, 2008, 1999, 1999, 2008, 1999, 199…
## $ cyl          <int> 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, …
## $ trans        <chr> "auto(l5)", "manual(m5)", "manual(m6)", "auto(av)",…
## $ drv          <chr> "f", "f", "f", "f", "f", "f", "f", "4", "4", "4", "…
## $ cty          <int> 18, 21, 20, 21, 16, 18, 18, 18, 16, 20, 19, 15, 17,…
## $ hwy          <int> 29, 29, 31, 30, 26, 26, 27, 26, 25, 28, 27, 25, 25,…
## $ fl           <chr> "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "…
## $ class        <chr> "compact", "compact", "compact", "compact", "compac…

В этом наборе данных представлена информация о 38 моделях автомобилей. Среди 11 переменных в этом датасете есть 2 следующие переменные:

  • displ – объем двигателя (в литрах)
  • hwy – эффективность расхода топлива, сколько миль машина может проехать с одним галлоном (около 4 литров) топлива

Скорее всего эти переменные взаимосвязаны. Чем больше объем двигателя, тем меньше миль машина сможет проехать. Давайте проверим это, нарисовав график.

Видно, что и правда существует какая-то отрицательная связь. Но нас интересует то, как можно строить графики с помощью пакета ggplot2.

  1. Любой график в ggplot2 начинается с функции ggplot(), внутри которой вы передайте обязательный аргумент data – это ваш набор данных, в котором находится информация для визуализации.
  2. Весь рисунок – это наложение нескольких слоев с помощью знака плюс (+). Функция ggplot() строит первый слой. Она создает систему координат, к которой можно начинать добавлять слои.

  1. Функция geom_point() накладывает следующий слой, который состоит из точек. Эта функция имеет обязательный аргумент mapping, в котором вы должны указать оси (переменные) для вашего графика. Существует целое семейство функций, которые имеют название geom_xxx.

Атрибуты графика

Вы можете также можете изменять ваш график. Например, вы хотите изменить цвет (color) и размер (size) точек. Внутри функции вы можете добавить эти аргументы.

Вы можете писать какой-то цвет в виде строки. А можете использовать формат HEX. Например на сайте вы можете выбрать нужный вам цвет и использовать его.

Также вы можете поставить не точки, а другую форму (shape). Можно например поставить треугольники.

На рисунке показаны все виды форм.

Стоит заметить, что формы с 21 по 25 могут иметь 2 цвета. Обычный атрибут color отвечает за цвет границы. Если вы хотите закрасить фигуру, то можно использовать атрибут fill.

Также с помощью атрибута alpha вы можете делать ваши точки более прозрачными. Этот аргумент должен принимать значения от 0 до 1. По умолчанию стоит 1.

Некоторые точки не стали прозрачными. Это произошло, так как на самом деле там не одна, а несколько точек, поэтому при наложении друг на друга они дали менее прозрачную точку. Это аргумент бывает очень удобным, когда вы визуализируете большой набор данных.

Другой взгляд на атрибуты

Атрибуты украшают график, но можно использовать их и по-другому. До этого мы рисовали график, в котором использовали две непрерывные переменные. То есть на графике мы можем увидеть взаимосвязь только переменных. Нарисовать третью ось и перейти в трехмерное пространство, чтобы добавить 3 переменную было бы не очень хорошим решением. Атрибуты, про которые мы с вами узнали могут помочь нам добавить информацию на график о других переменных.

У нас есть переменная drv, которая принимает только 3 значения. Эти значения указывают какой привод у машины.

## # A tibble: 3 x 1
##   drv  
##   <chr>
## 1 f    
## 2 4    
## 3 r

Можно, например расскрасить каждое значение в отдельный цвет. В этом случае нам нужно сделать следующее:

  1. ВАЖНО! Использовать атрибут color в функции aes.
  2. Передаем теперь этому артрибуты не какой-то цвет, а переменную drv.

Нарисуем наш новый график!

У нашего графика автоматически появилась легенда. Про нее мы тоже поговорим позже.

Попробуем теперь использовать переменную cyl, которая показывает количество цилиндров в двигателе. Эта переменная принимает значения 4, 5, 6 и 8.

График получился не таким как раньше. Это просходит, так как мы имеем числовую переменную. Но у нас всего 4 значения, поэтому стоит использовать факторный тип. Перевести переменную в факторный тип можно прямо внутри функции aes.

Вы можете использовать и другие атрибуты, а также их комбинации.

На таком графике уже можно увидеть взаимосвязь 4 переменных. Но не стоит этим увлекаться. График не должен быть сложным.

Виузализация временных рядов

До этого мы с вами говорили про график рассеяния (scatter plot). Он показывал взаимосвязь двух непрерывных переменных. Часто нам хочется посмотреть на динамику какого-то показателя (переменной) во времени.

Давайте возьмем датасет economics из пакеты dplyr. Видим, что у нас есть переменная date, которая уже имеет формат даты. А также какие-то показатели. Например уровень безработицы (uempmed). Давайте нарисуем график дата – уровень безработицы. Для этого используем слой geom_line(), который работает аналогично geom_point().

Давайте добавим еще временной ряд для переменной psavert, которая показывает процент личных сбережений людей. Мы можем просто нанести еще один слой geom_line().

Получилось два временных ряда на одной картинке, но они одного цвета, и легенда не появилась. Первый способ как это можно исправить это задать цвет и легенду самому, это очень неприятный способ. Второй способ это использовать знакомую нам функцию gather. С ggplot можно использовать pipe (%>%).

Если в вашем слое вы постоянно работаете с одними осями, то вы можете их указать прямо в функции ggplot, чтобы не писать их несколько раз.

Гистограмма

Гистограмма строится для одной непрерывной переменной. Это нужно, чтобы посмотреть на распределение нашей переменной. Для построения гистограммы достаточно указать одну ось **x* и использовать функцию geom_histogram.

Мы получили гистограмму, но она не очень хорошо выглядит. Возникают интервалы, в которых переменная не принимает никакие значения. Из-за этого эти интервалы пустые. Сейчас автоматически выбирается ширина прямоугольничков. Ее можно менять с помощью аргумента binwidth.

Часто нам не нужно абсолютное значение, а нужно плотность распределения. Ее можно добавить с помощью известной функции aes, внутри которой ей присовить значение ..density... Точками отделяем, чтобы R не подумал, что это название переменной.

Вы можете так же использовать атрибуты.

График не совсем понятный, так как у значения x равным 2.5 мы не понимаем долю setosa.

Есть несколько способов исправить это.

Первый способ: использовать аргумент position.

Эти графики не так хороши. Поэтому есть второй способ: использовать функцию geom_freqpoly вместо geom_histogram. Она рисует распределение линиями.

Диаграмма

Диаграмма строится для одной дискретной переменной. То есть переменные принимающие конечное число значений (факторные). Их можно нарисовать аналогично с помощью функции geom_bar.

Давайте посмотрим на количество машин, которые имеют передний, задний привод или 4x4.

Вы так же можете использовать атрибуты.

Если на такой график смотреть неудобно, то можно сделать по каждой переменной отдельный столбец с помощью аргумента position.